package Tela;

import java.sql.SQLException;
import java.util.ArrayList;

import VisualOperadores.AcaoPgUniao;

public class AcaoPGArco extends AcaoPanelGrafo {

	private ItemPGNoh nohIni;
	private ItemPGArco arcoAtual;
	private int count = 0;
	private ArrayList<String> tabelasIni, tabelasFim;
	private String operadorIni, operadorFim;

	public String executar(int x, int y) {
		if (nohIni == null) {
			nohIni = findNoh(x, y);
			if (nohIni == null)
				return null;
			arcoAtual = new ItemPGArco(nohIni);
			nohIni.addArco(arcoAtual);
			getPanelGrafo().addItem(arcoAtual);
			return null;
		} else {
			ItemPGNoh noh = findNoh(x, y);
			if (noh == null)
				return null; // a principio nao deveria
			arcoAtual.setNohFinal(noh);
			// Rodrigo
			if (noh.getTextoObjeto().equalsIgnoreCase("uniao")) { // UNIAO
				noh.setSelecoes(nohIni.getSql());
				AcaoPgUniao aUniao = new AcaoPgUniao();
				ArrayList<String> al = noh.getSelecoes();
				for (int count = 0; count < al.size(); count++) {
					aUniao.setOperadores(al.get(count), count);
				}
				noh.SetSql(aUniao.doSQL());

			} else if (noh.getTextoObjeto().equalsIgnoreCase("P x C")) { // PRODUTO

				count++;

				try {
					if (count == 1) {
						tabelasIni = null;
						tabelasIni = getPanelGrafo().getObjConexao()
								.retornaColunasTabelas(nohIni.getSql());

						operadorIni = nohIni.getSql();

					} else if (count == 2) {
						tabelasFim = null;
						tabelasFim = getPanelGrafo().getObjConexao()
								.retornaColunasTabelas(nohIni.getSql());

						operadorFim = nohIni.getSql();

					}

				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				if (count == 2) {
					count = 0;
					telaCondicaoPxC objtelaPxC = new telaCondicaoPxC(
							tabelasIni, tabelasFim, noh, operadorIni,
							operadorFim);
				}

			} else if (noh.getTextoObjeto().equalsIgnoreCase("selecao")) { // SELECAO

				ArrayList<String> tabelas = null;

				try {
					tabelas = getPanelGrafo().getObjConexao()
							.retornaColunasTabelas(nohIni.getSql());
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				telaCondicao objtela = new telaCondicao(tabelas, noh, nohIni
						.getSql(), true, true);

			} else if (noh.getTextoObjeto().equalsIgnoreCase("projecao")) { // PROJECAO

				ArrayList<String> tabelas = null;

				try {
					tabelas = getPanelGrafo().getObjConexao()
							.retornaColunasTabelas(nohIni.getSql());
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				telaCondicao objtela = new telaCondicao(tabelas, noh, nohIni
						.getSql(), false, true);

			} else if (noh.getTextoObjeto().equalsIgnoreCase("agrupamento")) {

				ArrayList<String> tabelas = null;

				try {
					tabelas = getPanelGrafo().getObjConexao()
							.retornaColunasTabelas(nohIni.getSql());
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				telaCondicao objtela = new telaCondicao(tabelas, noh, nohIni
						.getSql(), false, false);

			}
			// Rodrigo
			noh.addArco(arcoAtual);
			arcoAtual = null;
			nohIni = null;
		}
		return null;

	}

	private ItemPGNoh findNoh(int x, int y) {
		PanelGrafo pg = getPanelGrafo();
		int totalItems = pg.qtosItems();
		ItemPanelGrafo item;
		for (int i = 0; i < totalItems; i++) {
			item = pg.getItem(i);
			if (item instanceof ItemPGNoh && item.contido(x, y))
				return (ItemPGNoh) item;
		}
		return null;
	}

	public void encerrar(int x, int y) {
	}

	public void mover(int x, int y) {
	}

	public void mudouAcao() {
		if (nohIni != null) {
			nohIni.removerArco(arcoAtual);
			getPanelGrafo().removerItem(arcoAtual);
			arcoAtual = null;
			nohIni = null;
		}
	}

}
